package com.itheima.d3_recursion;

//目标：了解方法递归的实现
public class Demo1 {
    public static void main(String[] args) {
        /**
         * 方法递归：方法内部自己直接或间接调用自己
         *
         * 递归形式：方法自己调用自己是直接递归。方法调用其他方法，通过其他方法回调自己是间接递归
         *
         * 存在的问题：如果没有控制好，会出现栈内存溢出
         *
         * 需求：分别调用各个方法，观察效果即可
         */

    }

    //直接递归
    public static int directRecursion(int num) {
        if (num == 1) {
            return 1;
        }
        return num + directRecursion(num - 1);
    }

    //间接递归
    public static void indirectRecursion(int num) {
        if (num == 1) {
            return;
        }
        System.out.println("间接递归...");
        midMethod(num - 1);
    }

    public static void midMethod(int num) {
        System.out.println("间接递归的中间方法");
        indirectRecursion(num);
    }

    //栈内存溢出
    public static void stackOverFlow() {
        stackOverFlow();
    }
}
